dubbo异步调用

您所在的位置:网站首页 dubbo同步 异步 dubbo异步调用

dubbo异步调用

2023-10-20 09:06| 来源: 网络整理| 查看: 265

概念

官网地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/async-call/

异步调用就是利用了Java的多线程异步调用类 ​

代码地址

https://gitee.com/zjj19941/ZJJ_Dubbo.git 下的 async-call 就是异步调用的代码demo案例 ​

代码演示 interface项目

返回值是CompletableFuture ​

package com.zjj; import java.util.concurrent.CompletableFuture; public interface DemoService { // 异步调用方法 CompletableFuture sayHelloAsync(String name) ; } provider项目

实现interface的接口,在方法内部使用CompletableFuture异步处理 ​

package com.zjj.provider.service; import com.zjj.DemoService; import org.apache.dubbo.config.annotation.Service; import java.util.concurrent.CompletableFuture; @Service(version = "default") public class DefaultDemoService implements DemoService { @Override public CompletableFuture sayHelloAsync(String name) { System.out.println("执行了异步服务,参数 : " + name); return CompletableFuture.supplyAsync(() -> { return "异步执行完了"; // 正常访问 }); } } consumer项目 package com.zjj; import org.apache.dubbo.config.annotation.Reference; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import java.util.concurrent.CompletableFuture; @SpringBootApplication public class DubboConsumerDemo { //@Reference注解就是用于标记这个服务具体使用了生产者的哪个接口实现 @Reference(version = "default") private DemoService demoService; public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(DubboConsumerDemo.class); DemoService demoService = context.getBean(DemoService.class); // 调用直接返回CompletableFuture CompletableFuture future = demoService.sayHelloAsync("异步调用"); // 5 System.out.println("1.在执行别的业务逻辑......"); future.whenComplete((v, t) -> { if (t != null) { t.printStackTrace(); } else { System.out.println("3.异步调用provider结果 : " + v); } }); System.out.println("2.结束了"); } } 执行结果

消费者控制台: ​

1.在执行别的业务逻辑...... 2.结束了 3.异步调用provider结果 : 异步执行完了

你会发现消费者那里并没有等CompletableFuture future = demoService.sayHelloAsync(“异步调用”);执行完,而是接着执行别的业务逻辑了,直到provider执行完了之后,返回了CompletableFuture,然后在whenComplete方法里面拿取到了结果

dubbo其它异步方式

参考别人的文章: https://mp.weixin.qq.com/s/U3eyBUy6HBVy-xRw3LGbRQ ​



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3